{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"https://raw.githubusercontent.com/Qiskit/qiskit-tutorials/master/images/qiskit-heading.png\" alt=\"Note: In order for images to show up in this jupyter notebook you need to select File => Trusted Notebook\" width=\"500 px\" align=\"left\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## _*Amplitude and Phase*_ \n",
    "\n",
    "The latest version of this notebook is available on https://github.com/QISKit/qiskit-tutorial.\n",
    "\n",
    "***\n",
    "### Contributors\n",
    "Jay Gambetta, Antonio Córcoles\n",
    "\n",
    "\n",
    "### Qiskit Package Versions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'qiskit': '0.10.3',\n",
       " 'qiskit-terra': '0.8.1',\n",
       " 'qiskit-ignis': '0.1.1',\n",
       " 'qiskit-aer': '0.2.1',\n",
       " 'qiskit-ibmq-provider': '0.2.2',\n",
       " 'qiskit-aqua': '0.5.1'}"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import qiskit\n",
    "qiskit.__qiskit_version__"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Introduction\n",
    "In [superposition](superposition_and_entanglement.ipynb) we looked at the concept of computational states, and superpostion states. Here we continue the development of the understanding of a quantum state by introducing the concept of amplitude and phase. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## A qubit \n",
    "\n",
    "The fundamental unit of quantum information is a qubit. It is a two-dimensional vector space of the complex numbers $\\mathbb{C}^2$. A qubit has some similarities to a classical bit, but is overall very different. Like a bit, a qubit can have two possible values - normally a 0 or a 1 which we denote $|0\\rangle$ and $|1\\rangle$. The difference is that whereas a bit must be either 0 or 1, a qubit can be 0, 1, or a superpostion of both. An arbitrary pure state of the qubit can be written as \n",
    "\n",
    "$$ |\\psi\\rangle = \\alpha |0\\rangle + \\beta |1\\rangle$$\n",
    "\n",
    "where $\\alpha$ and $\\beta$ are complex numbers. When a qubit in the state $|\\psi\\rangle$ is measured, the result is not deterministic, and one obtains the state $|0\\rangle$ with probability $|\\alpha|^2$ and the state $|1\\rangle$ with probability $|\\beta|^2$. This imposes the constrain that $|\\alpha|^2 + |\\beta|^2=1$ from conservation of probability. We can now define a pure state for a qubit as \n",
    "\n",
    "$$ |\\psi\\rangle = \\cos(\\theta/2)|0\\rangle + e^{i\\phi} \\sin(\\theta/2) |1\\rangle$$\n",
    "\n",
    "where $0\\leq \\phi < 2\\pi$ and $0 \\leq \\theta \\leq \\pi$. \n",
    "\n",
    "\n",
    "Quantum gates for a qubit are represented as a $2\\times2$ unitary matrix $U$. The action on the quantum gate is found by\n",
    "\n",
    "$$ |\\psi'\\rangle = U |\\psi \\rangle $$ and the most general unitary must be able to take $|0\\rangle$ to the above state. \n",
    "This gives \n",
    "\n",
    "$$U = \\begin{pmatrix} \\cos(\\theta/2) & a \\\\ e^{i\\phi}\\sin(\\theta/2) & b \\end{pmatrix}$$ \n",
    "\n",
    "where $a$ and $b$ are complex numbers constrained such that $U^\\dagger U = I$ for all $0\\leq \\theta \\leq \\pi$ and $0\\leq\\phi < 2\\pi$. This gives 3 constraints and as such $a\\rightarrow -e^{i\\lambda} \\sin(\\theta/2)$ and $b \\rightarrow e^{i\\lambda + i \\phi} \\cos(\\theta/2)$ where $0\\leq \\lambda < 2\\pi$\n",
    "\n",
    "$$U = \\begin{pmatrix} \\cos(\\theta/2) & -e^{i\\lambda} \\sin(\\theta/2) \\\\ e^{i\\phi}\\sin(\\theta/2) & e^{i\\lambda + i \\phi} \\cos(\\theta/2) \\end{pmatrix}$$ \n",
    "\n",
    "This allows us to define a general single-qubit rotation as a function of the three parameters $\\theta$, $\\phi$ and $\\lambda$, $U(\\theta, \\phi, \\lambda)$\n",
    "\n",
    "It is generally useful to understand general single-qubit rotations in terms of a very special group of matrices called the Pauli matrices $X$, $Y$ and $Z$. We already saw in [superposition](superposition.ipynb) that the $X$ Pauli matrix could be defined as \n",
    "\n",
    "$$ X =\\begin{pmatrix} 0 & 1 \\\\ 1 & 0 \\end{pmatrix}$$\n",
    "\n",
    "Similarly, we can also define \n",
    "\n",
    "$$ Y =\\begin{pmatrix} 0 & -i \\\\ i & 0 \\end{pmatrix}$$\n",
    "\n",
    "and\n",
    "\n",
    "$$ Z =\\begin{pmatrix} 1 & 0 \\\\ 0 & -1 \\end{pmatrix}$$\n",
    "\n",
    "An important aspect of the Pauli matrices is that $X^2=Y^2=Z^2=I$. This allows us to simplify \n",
    "\n",
    "$$e^{i \\theta P}=  \\cos(\\theta)I + i\\sin(\\theta)P$$\n",
    "\n",
    "with $P$ a Pauli matrix. The Pauli matrices can be thus considered as the generators of rotations in the single-qubit space. We can then define the rotations\n",
    "\n",
    "$$r_x(\\theta) = e^{-i \\theta/2 X} = \\cos(\\theta/2)I - i \\sin(\\theta/2)X = \\begin{pmatrix} \\cos(\\theta/2) & -i\\sin(\\theta/2) \\\\ -i\\sin(\\theta/2) & \\cos(\\theta/2) \\end{pmatrix}$$\n",
    "\n",
    "$$r_y(\\theta) = e^{-i \\theta/2 Y} = \\cos(\\theta/2)I - i \\sin(\\theta/2)Y = \\begin{pmatrix} \\cos(\\theta/2) & -\\sin(\\theta/2) \\\\ \\sin(\\theta/2) & \\cos(\\theta/2) \\end{pmatrix}$$\n",
    "\n",
    "$$r_z(\\theta) = e^{-i \\theta/2 Z} = \\cos(\\theta/2)I - i \\sin(\\theta/2)Z = \\begin{pmatrix} e^{-i\\theta/2} & 0 \\\\ 0 & e^{i\\theta/2} \\end{pmatrix} := \\begin{pmatrix} 1 & 0 \\\\ 0 & e^{i\\theta} \\end{pmatrix}$$\n",
    "\n",
    "And now, in terms of the previously defined $U(\\theta, \\phi, \\lambda)$, we can define the parametrized rotations\n",
    "\n",
    "$$u_3(\\theta, \\phi, \\lambda) = U(\\theta, \\phi, \\lambda) = r_z(\\phi)r_y(\\theta)r_z(\\lambda) = \\begin{pmatrix} e^{-i(\\phi + \\lambda)/2}\\cos(\\theta/2) & -e^{-i(\\phi - \\lambda)/2} \\sin(\\theta/2) \\\\ e^{i(\\phi-\\lambda)/2}\\sin(\\theta/2) & e^{i(\\phi + \\lambda)/2} \\cos(\\theta/2) \\end{pmatrix}$$\n",
    "\n",
    "where we have multiplied the above defined $U(\\theta, \\phi, \\lambda)$ by a global phase $e^{-i(\\phi + \\lambda)/2}$\n",
    "\n",
    "Similarly, we can define the parametrized rotations\n",
    "\n",
    "$$u_2(\\phi, \\lambda) = U(\\pi/2, \\phi, \\lambda)$$\n",
    "\n",
    "and \n",
    "\n",
    "$$u_1(\\lambda) = U(0,0,\\lambda) := r_z(\\lambda)$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## Phase gates\n",
    "\n",
    "Let's explore the action of some of the single-qubit gates we have just defined. We will start with the phase gate $u_1(\\lambda)$. We can see from the gate matrix that this gate does not modify the state $|0\\rangle$ and applies a phase of $\\lambda$ to the state $|1\\rangle$. In order for us to observe the effect of this gate on a qubit we need to make use of the Hadamard gate defined in [superposition](superposition.ipynb)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# useful additional packages \n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "\n",
    "# importing Qiskit\n",
    "from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit, execute, BasicAer, IBMQ"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Following a Hadamard gate, we will perform a $u_1(\\lambda)$ of varying angle $\\lambda \\in \\{ - \\pi, \\pi \\}$ and observe the qubit state oscillate between the states $|+\\rangle$ ($X$ eigenvalue +1) and $|-\\rangle$ ($X$ eigenvalue -1)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 481.6x138.46 with 1 Axes>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Creating registers\n",
    "qr = QuantumRegister(1)\n",
    "cr = ClassicalRegister(1)\n",
    "\n",
    "circuits = []\n",
    "\n",
    "# Creating the circuits\n",
    "phase_vector = range(0,100)\n",
    "for phase_index in phase_vector:\n",
    "    phase_shift = phase_index-50\n",
    "    phase = 2*np.pi*phase_shift/50\n",
    "    circuit_name = \"phase_gate_%d\"%phase_index\n",
    "    qc_phase_gate = QuantumCircuit(qr, cr, name=circuit_name)\n",
    "    qc_phase_gate.h(qr)\n",
    "    qc_phase_gate.u1(phase, qr)\n",
    "    qc_phase_gate.h(qr)\n",
    "    qc_phase_gate.measure(qr[0], cr[0])\n",
    "    circuits.append(qc_phase_gate)\n",
    "\n",
    "# Visualising one of the circuits as an example\n",
    "circuits[25].draw(output='mpl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# To run using qasm simulator\n",
    "backend = BasicAer.get_backend('qasm_simulator')\n",
    "\n",
    "# the number of shots in the experiment \n",
    "shots = 1024\n",
    "\n",
    "result = execute(circuits, backend=backend, shots=shots).result()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "probz = []\n",
    "phase_value = []\n",
    "for phase_index in phase_vector:\n",
    "    phase_shift = phase_index - 50\n",
    "    phase_value.append(2*phase_shift/50)\n",
    "    if '0' in result.get_counts(circuits[phase_index]):\n",
    "        probz.append(2*result.get_counts(circuits[phase_index]).get('0')/shots-1)\n",
    "    else:\n",
    "        probz.append(-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(phase_value, probz, 'b',0.25,1/np.sqrt(2),'ro',0.5,0,'ko',1,-1,'go',-0.25,1/np.sqrt(2),'rx',-0.5,0,'kx',-1,-1,'gx')\n",
    "plt.xlabel('Phase value (Pi)')\n",
    "plt.ylabel('Eigenvalue of X')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see the eigenstate of $X$ oscillating between +1 and -1. The six symbols in the plot correspond to special gates that we use as part of our universal set of gates. These are $T$ ($T^{\\dagger}$) for the red dot (cross), $S$ ($S^{\\dagger}$) for the black dot (cross) and $Z$ ($Z^{\\dagger}$) for the green dot (cross). Therefore, we can see that $T=u_1(\\pi/4)$, $S=u_1(\\pi/2)$ and $Z=u_1(\\pi)$, with their adjoints corresponding to the negative arguments.\n",
    "\n",
    "Now let's have a look at how the unitaries $u_3$ operate on a qubit state."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 421.4x138.46 with 1 Axes>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Creating registers\n",
    "qr = QuantumRegister(1)\n",
    "cr = ClassicalRegister(1)\n",
    "circuits = []\n",
    "\n",
    "# Creating the circuits\n",
    "phase_vector = range(0,100)\n",
    "for phase_index in phase_vector:\n",
    "    phase_shift = phase_index-50\n",
    "    phase = 2*np.pi*phase_shift/50\n",
    "    circuit_name = \"phase_gate_%d\"%phase_index\n",
    "    qc_phase_gate = QuantumCircuit(qr, cr, name=circuit_name)\n",
    "    qc_phase_gate.u3(phase,0,np.pi, qr)\n",
    "    qc_phase_gate.measure(qr[0], cr[0])\n",
    "    circuits.append(qc_phase_gate)\n",
    "    \n",
    "# Visualising one of the circuits as an example\n",
    "circuits[75].draw(output='mpl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# To run of qasm simulator\n",
    "backend = BasicAer.get_backend('qasm_simulator')\n",
    "\n",
    "# the number of shots in the experiment \n",
    "shots = 1024\n",
    "\n",
    "result = execute(circuits, backend=backend, shots=shots).result()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "probz = []\n",
    "phase_value = []\n",
    "for phase_index in phase_vector:\n",
    "    phase_shift = phase_index - 50\n",
    "    phase_value.append(2*phase_shift/50)\n",
    "    if '0' in result.get_counts(circuits[phase_index]):\n",
    "        probz.append(2*result.get_counts(circuits[phase_index]).get('0')/shots-1)\n",
    "    else:\n",
    "        probz.append(-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(phase_value, probz, 'b',0.5,0,'ko',1,-1,'go',-0.5,0,'kx',-1,-1,'gx')\n",
    "plt.xlabel('Phase value (Pi)')\n",
    "plt.ylabel('Eigenvalue of Z')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this case, we see that $u_3(\\pi/2,0,\\pi)$ corresponds to a $\\pi/2$ rotation around $X$ (black dot) and $u_3(\\pi,0,\\pi)$ corresponds to a bit-flip around $X$ (green dot). The rotations in the negative directions are shown as crosses. We could also have implemented these rotations around the $Y$ axis by simply using $u_3(\\lambda,\\pi/2,\\pi/2)$.\n",
    "\n",
    "As an exercise, prove that the Hadamard gate can be implemented as $H = u_2(0, \\pi)$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "Now you know about single qubit states, it's time to move onto multi-qubit states. Please continue to [Entanglement](entanglement_introduction.ipynb) to explore further!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
